/*
 * @lc app=leetcode.cn id=1005 lang=javascript
 *
 * [1005] K 次取反后最大化的数组和
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var largestSumAfterKNegations = function (nums, k) {
  const sorted = nums.sort((a, b) => Math.abs(a) - Math.abs(b));
  let sum = 0;

  for (let i = sorted.length - 1; i >= 0; i--) {
    if (k > 0 && sorted[i] < 0) {
      sum += -sorted[i];
      k--;
    } else {
      sum += sorted[i];
    }
  }

  if (k % 2 === 1) {
    // 因为提前加了一倍，这里要多扣一倍
    sum -= 2 * Math.abs(sorted[0]);
  }

  return sum;
};
// @lc code=end

// @after-stub-for-debug-begin
module.exports = largestSumAfterKNegations;
// @after-stub-for-debug-end
